package com.example.aop.proxyplus;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

// 动态代理类

/**
 *自动生成代理类
 * 灵活性高
 */
public class ProxyPlusHandler implements InvocationHandler {
    //InvocationHandler：负责定义代理逻辑（如 invoke() 方法中的前置/后置增强）
    private Object target;
    //通过构造函数传入被代理对象（OrderServiceImpl）
    public ProxyPlusHandler(Object target) {
        this.target = target;
    }
    // invoke() 方法：负责调用被代理对象的方法
    // Object proxy：当前代理对象，通过 Proxy.newProxyInstance 创建的代理实例
    // Method method：当前被调用的目标方法的Method 对象
    //获取方法信息：通过 method.getName() 可以获取方法名，method.getParameterTypes() 可以获取参数类型，method.getReturnType() 可以获取返回类型。
    // Object[] args：表示调用目标方法时传入的参数数组。
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        long startTime = System.currentTimeMillis();
        System.out.println("【动态代理】方法开始：" + method.getName());
        Object result = method.invoke(target, args); // 调用真实方法
        long endTime = System.currentTimeMillis();
        System.out.println("【动态代理】方法结束，耗时：" + (endTime - startTime) + "ms");
        return result;
    }
}
